package dslProgramGen;

import java.util.ArrayList;
import java.util.List;

/**
 * 在单个函数trace转DSL语句过程中的辅助结构，表示指定id的对象在DSL程序中可以怎样表示
 */
public class WhoPointToThisObjectCollection {
    /**
     * 指定对象的类型，已经将类名中的 '/'换成了'_'
     * 数组 [Ljava_lang_Class;
     */
    public String objectType;
    /**
     * 指定对象的id
     */
    public String objectId;
    /**
     * 哪些local root可以表示该对象
     */
    public List<String> lrAndPrPointToThisObjectList = new ArrayList<>();
    /**
     * 哪些对象字段可以表示该对象，例如 该对象由obj.field表示
     */
    public List<String> fieldOfObjExpressionsPointToThisObjectList = new ArrayList<>();

    /**
     * 辅助 Return new Student(); 处理
     * 将新对象赋值给临时local root，Student tempStu = new Student();
     * 后续处理Return trace时，删除谁指向新对象的临时local root
     */
    public List<String> newForReturnTempLocalRootList = new ArrayList<>();

    /**
     * 辅助 f(new Student()); 处理
     * 将新对象赋值给临时local root，Student tempStu = new Student();
     * 后续处理函数调用时，删除谁指向新对象的临时local root,tempStu=null
     */
    public List<String> newForMethodParameterTempLocalRootList = new ArrayList<>();


    /**
     * 辅助 Return f(); 处理
     * 将函数返回值赋值给临时local root，Student tempStu = f();
     * 后续处理Return trace时，删除谁指向函数返回值的临时local root
     */
    public List<String> methodReturnForReturnTempLocalRootList = new ArrayList<>();


    /**
     * 辅助 f(g()); 处理
     * 将函数返回值赋值给临时local root，Student tempStu = g();
     * 后续处理函数调用时，删除谁指向函数返回值的临时local root,tempStu=null
     */
    public List<String> methodReturnForMethodParameterTempLocalRootList = new ArrayList<>();

    /**
     * 辅助 GET处理
     * 记录临时通过Get获取到的对象
     */
    public List<String> getTracesRecordList = new ArrayList<>();

    public WhoPointToThisObjectCollection(String objectType, String objectId) {
        this.objectType = objectType;
        this.objectId = objectId;
    }
}